﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using AudiPyme.DAL;
using System.Text;

namespace AudiPyme.UI
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Si el elemento de Sesión del usuario no existe o es vacío se redirige a login
            //Esto trabaja conjuntamente con lo definido en Global.asax para dar seguridad a las páginas web
            if (Session["nombreUsuario"] == null || Session["nombreUsuario"].ToString() == "")
            {
                Response.Redirect("InicioSesion.aspx");
            }
            else
            {
                String NombreSesion = (String)Session["nombreUsuario"];
                int EmpresaUsuario = UsuariosFactory.EmpresaUsuario(NombreSesion);
                GeneraOpciones(EmpresaUsuario);
            }
            //Limpiamos la caché
            Response.Buffer = true;
            Response.ExpiresAbsolute = DateTime.Now.AddDays(-1d);
            Response.Expires = -1500;
            Response.CacheControl = "no-cache";
        }

        //Genera las opciones del Menú Principal según la situación en la que esté la empresa asociada al usuario
        private void GeneraOpciones(int IdEmpresa)
        {
            try
            {
                //Si la empresa está creada se activa la opción de nivel de Madurez en el menú
                if (IdEmpresa != 0)
                {
                    HtmlGenericControl opc1 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc1);
                    HtmlGenericControl anchor1 = new HtmlGenericControl("a");
                    anchor1.Attributes.Add("href", "EmpresaPrincipal.aspx");
                    anchor1.InnerText = "empresa";
                    opc1.Controls.Add(anchor1);
                    HtmlGenericControl opc2 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc2);
                    HtmlGenericControl anchor2 = new HtmlGenericControl("a");
                    anchor2.Attributes.Add("href", "EmpresaNivMadurezPrincipal.aspx");
                    anchor2.InnerText = "madurez";
                    opc2.Controls.Add(anchor2);
                }
                //Si no, la opción del menú de Empresa tiene que redirigir a Empresa Crear
                else
                {
                    HtmlGenericControl opc1 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc1);
                    HtmlGenericControl anchor1 = new HtmlGenericControl("a");
                    anchor1.Attributes.Add("href", "EmpresaCrear.aspx");
                    anchor1.InnerText = "empresa";
                    opc1.Controls.Add(anchor1);
                }
                //Se recogen los niveles de madurez (actual y deseable de la empresa)
                int MadActEmp = EmpresasFactory.MadurezActualEmpresa(IdEmpresa);
                int MadDesEmp = EmpresasFactory.MadurezDeseadaEmpresa(IdEmpresa);
                //Si la empresa tiene los dos niveles de madurez, se activa la opción de activos
                if (MadActEmp != 0 && MadDesEmp != 0)
                {
                    HtmlGenericControl opc2 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc2);
                    HtmlGenericControl anchor2 = new HtmlGenericControl("a");
                    anchor2.Attributes.Add("href", "ActivosPrincipal.aspx");
                    anchor2.InnerText = "activos";
                    opc2.Controls.Add(anchor2);
                }
                //Se recoge el número de activos que tiene la empresa
                int NumActivosEmp = ActivosEmpresaFactory.NumeroTotalesActivosEmpresa(IdEmpresa);
                //Se recoge el número de relaciones que tiene una empresa
                int NumRelTipActAmenCrit = InstanciaTiposActivosAmenazasCriteriosRiesgoFactory.NumRelacTipAmenCritEmpresa(IdEmpresa);
                int NumRelTipActVuln = InstanciaTiposActivosVulnerabilidadesFactory.NumRelacTipActVuln(IdEmpresa);
                bool banderaActiva = false;
                //Si la empresa tiene activos definidos, se activa la opción de relaciones
                if (NumActivosEmp != 0)
                {
                    HtmlGenericControl opc3 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc3);
                    HtmlGenericControl anchor3 = new HtmlGenericControl("a");
                    anchor3.Attributes.Add("href", "RelacionesPrincipal.aspx");
                    anchor3.InnerText = "relaciones";
                    opc3.Controls.Add(anchor3);
                    //Si se han elegido relaciones de ambos tipos para los activos, se genera la opción informe
                    if (NumRelTipActAmenCrit != 0 && NumRelTipActVuln != 0)
                    {
                        HtmlGenericControl opc4 = new HtmlGenericControl("li");
                        ListaMenu.Controls.Add(opc4);
                        HtmlGenericControl anchor4 = new HtmlGenericControl("a");
                        anchor4.Attributes.Add("href", "InformesPrincipal.aspx");
                        anchor4.InnerText = "informes";
                        opc4.Controls.Add(anchor4);
                        banderaActiva = true;
                    }
                }
                //Si la empresa ha descartado todos los activos y relaciones pero tiene informes guardados la opción
                //del menú informe se genera pero redirige a informes consultar para poder consultar los informes 
                int NumInformesEmp = EmpresaInformeFactory.NumeroInformesEmpresa(IdEmpresa);
                if (NumInformesEmp != 0 && !banderaActiva)
                {
                    HtmlGenericControl opc5 = new HtmlGenericControl("li");
                    ListaMenu.Controls.Add(opc5);
                    HtmlGenericControl anchor5 = new HtmlGenericControl("a");
                    anchor5.Attributes.Add("href", "InformesConsultar.aspx");
                    anchor5.InnerText = "informes";
                    opc5.Controls.Add(anchor5);
                }
            }
            catch (Exception e1)
            {
                e1.ToString();
                MuestraMensaje("Error en la página maestra");
            }

        }

        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        protected void Cerrar_Sesion_Click(object sender, EventArgs e)
        {
            //Cerramos Sesión
            Session.Abandon();
            //Redirigimos al Inicio de sesión
            Response.Redirect("InicioSesion.aspx");

        }

    }
}
